package library.frame;

import library.logic.ManagementSystem;

import javax.swing.*;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.PatternSyntaxException;

/**
 * User: RockCrazy
 * Date: 20.01.12
 * Time: 22:34
 */
public class WinFindBook extends JFrame implements ActionListener
{
	// Владелец нашего окна - вводим для вызова нужного нам метода
	private MainFrame owner;

	private ManagementSystem ms = null;

	// Результат нажатия кнопок
	private boolean result = false;

	private JTextField fieldFind = new JTextField();

	// Параметры окна
	private static final int D_HEIGHT = 420;   // высота окна
	private final static int D_WIDTH = 500;   // ширина окна


	private static final String SHOW_BOOK = "SELECT book_name, author, izdatel, year_izdan, prim, oglav" +
			" FROM book ";

	/**
	 * @param owner
	 */
	public WinFindBook(MainFrame owner) throws Exception
	{
		// Получаем коннект к базе и создаем объект ManagementSystem
		ms = ManagementSystem.getInstance();
		this.owner = owner;
		// Установить заголовок
		setTitle("Поиск книги");

		getContentPane().setLayout(new BorderLayout());
		// Устанавливаем верхнюю панель
		JPanel topPanel = new JPanel();
		topPanel.setLayout(new BorderLayout());

		// Разместим компоненты по абсолютным координатам

		// Создаем таблицу для вывода Книг
		DynamicTableModel dmtBooks = new DynamicTableModel(false);
		JTable allList = new JTable(dmtBooks);
		final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(dmtBooks);
		allList.setRowSorter(sorter);

		dmtBooks.setDataSource(ms.stringSQL(SHOW_BOOK));
		ms.closeRS(ms.stringSQL(SHOW_BOOK));

		topPanel.add(new JScrollPane(allList), BorderLayout.CENTER);

		// Устанавливаем нижнюю панель
		JPanel botPanel = new JPanel();
		botPanel.setLayout(new GridLayout(1, 3));

		JLabel lFind = new JLabel("Введите текст :   ", JLabel.RIGHT);
		botPanel.add(lFind);
		botPanel.add(fieldFind);

		JButton btnFind = new JButton("<html><font color=green>Поиск");
		btnFind.setName("Поиск");
		btnFind.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				String text = fieldFind.getText();
				if (text.length() == 0)
				{
					sorter.setRowFilter(null);
				} else
				{
					try
					{
						sorter.setRowFilter(RowFilter.regexFilter(text));
					}
					catch (PatternSyntaxException pse)
					{
						System.err.println("Неправильный формат");
					}
				}
			}
		});
		botPanel.add(btnFind);


		JButton btnCancel = new JButton("Выход");
		btnCancel.setName("Выход");
		btnCancel.addActionListener(this);
		botPanel.add(btnCancel);

		// Добавляем в общий контейнер topPanel (в центр)
		getContentPane().add(topPanel, BorderLayout.CENTER);
		// Добавляем в общий контейнер botPanel (в низ)
		getContentPane().add(botPanel, BorderLayout.SOUTH);


		// Устанавливаем поведение формы при закрытии - не закрывать совсем.
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

		// Получаем размеры экрана
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		// А теперь просто помещаем его по центру, вычисляя координаты на основе полученной информации
		setBounds(((int) d.getWidth() - WinFindBook.D_WIDTH) / 2, ((int) d.getHeight() - WinFindBook.D_HEIGHT) / 2, WinFindBook.D_WIDTH, WinFindBook.D_HEIGHT);

	}

	// Получить результат, true - кнопка ОК, false - кнопка Cancel
	public boolean getResult()
	{
		return result;
	}


	public void actionPerformed(ActionEvent aE)
	{
		JButton src = (JButton) aE.getSource();

		if (src.getName().equals("Выход"))
		{
			result = false;
		}
		setVisible(false);
	}
}
